#ifndef CUSTOMTABLEVIEW_H
#define CUSTOMTABLEVIEW_H

#include <QTableView>
#include <QStandardItemModel>
#include <QMouseEvent>

#include <QStyledItemDelegate>
#include <QFont>
#include <QPainter>
#include <QLineEdit>
#include <QPaintEvent>

class CustomDelegate : public QStyledItemDelegate {
public:
    CustomDelegate(QObject* parent = nullptr) : QStyledItemDelegate(parent) {}

    void paint(QPainter* painter, const QStyleOptionViewItem& option,
               const QModelIndex& index) const override
    {
        // 创建选项副本以便修改
        QStyleOptionViewItem opt = option;
        initStyleOption(&opt, index);

        QFont font("Microsoft YaHei", 14, QFont::Bold);
        painter->save();
        font.setBold(true);
        painter->setFont(font);
        QColor textColor(Qt::white);
        painter->setPen(textColor);

        // 绘制背景和焦点矩形
        if (opt.state & QStyle::State_Selected) {
            // 如果项被选中，绘制选中背景色
            painter->fillRect(opt.rect, opt.palette.highlight());
        } else {
            // 设置交替背景色
            if (index.row() % 2 == 0) {
                painter->fillRect(option.rect, "#072750"); // 浅灰色
            }
            else {
                painter->fillRect(option.rect, "#0e3865"); // 灰色
            }
        }

        // 使用默认方式绘制背景和焦点矩形，但不绘制文本
        opt.text = ""; // 清空文本以避免重复绘制
        opt.widget->style()->drawControl(QStyle::CE_ItemViewItem, &opt, painter, opt.widget);


        // 自定义文本颜色
        // QColor textColor(Qt::blue); // 蓝色文本
        painter->setPen(textColor);

        // 绘制自定义文本
        painter->drawText(opt.rect, Qt::AlignCenter, index.data(Qt::DisplayRole).toString());
    }

    // 自定义编辑器创建逻辑
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                          const QModelIndex &index) const override {
        QLineEdit *editor = new QLineEdit(parent);
        editor->setFont(QFont("Arial", 14, QFont::Bold)); // 设置编辑器字体为加粗、12号
        QPalette palette = editor->palette();
        palette.setColor(QPalette::Text, Qt::white); // 设置文本颜色为白色
        palette.setColor(QPalette::Base, "#0353a8"); // 背景颜色为黑色（可选）
        editor->setPalette(palette);
        return editor;
    }

    // 设置编辑器的数据
    void setEditorData(QWidget *editor, const QModelIndex &index) const override {
        QString value = index.model()->data(index, Qt::EditRole).toString();
        QLineEdit *lineEdit = qobject_cast<QLineEdit *>(editor);
        if (lineEdit) {
            lineEdit->setText(value); // 设置编辑器中的文本
        }
    }

    // 将编辑器的数据保存回模型
    void setModelData(QWidget *editor, QAbstractItemModel *model,
                      const QModelIndex &index) const override {
        QLineEdit *lineEdit = qobject_cast<QLineEdit *>(editor);
        if (lineEdit) {
            model->setData(index, lineEdit->text(), Qt::EditRole); // 将编辑器中的文本保存到模型
        }
    }
};

class CustomTableView : public QTableView
{
public:
    CustomTableView(QWidget* parent = nullptr);

    void setBackgroundColor(const QString& color);

protected:
    void mousePressEvent(QMouseEvent* event) override;

    void mouseMoveEvent(QMouseEvent* event) override;

    void mouseReleaseEvent(QMouseEvent* event) override;

    void paintEvent(QPaintEvent *event) override;

private:
    int resizingColumn; // 正在调整的列索引
    // int resizingRow;    // 正在调整的行索引
    int initialPos;     // 初始位置
    ///靠近的阈值计算
    bool isNearVerticalGridLine(const QPoint& pos) const;

    bool isNearHorizontalGridLine(const QPoint& pos) const;
};

#endif // CUSTOMTABLEVIEW_H
